#include <stdio.h>
#include <string.h>
struct st
{
    char a[10000];
} s[10000];

int main(int argc, char *argv[])
{

    char s1[10000], s2[10000];
    int i = 0, stl, f = 0, h = 0, flag, l;

    while (gets(s1))
    {
        int len = strlen(s1);
        if (len==0)
        {
            break;
        }

        memset(s2, 0, sizeof(s2));
        stl = strlen(s1);
        flag = 0;
        //查找是否存在函数名字
        for (i = 0; i < stl; i++)
        {
            if (s1[i] == '(' && i != 0)
            {
                flag = 1;
                break;
            }
        }
        //存在则存入s2
        if (flag == 1)
        {
            for (i = 0; i < stl; i++)
            {
                if (s1[i] != '(')
                {
                    s2[f++] = s1[i];
                }
                else
                {
                    break;
                }
            }
            //将字符串复制到结构体
            strcpy(s[h++].a, s2);
            f = 0;
        }
    }

    //结构体排序
    for (size_t i = 0; i < h; i++)
    {
        if(s[i].a[0]==' '){
                continue;
        }
        for (size_t z = i + 1; z < h; z++)
        {
            if(s[z].a[0]==' '){
                continue;
            }

            if (strcmp(s[i].a, s[z].a) > 0)
            {
                memset(s[9999].a, 0, 10000);
                strcpy(s[9999].a, s[i].a);

                memset(s[i].a, 0, 10000);
                strcpy(s[i].a, s[z].a);

                memset(s[z].a, 0, 10000);
                strcpy(s[z].a, s[9999].a);
            }
        }
    }

    printf("%s\n", s[0].a);
    
    for (l = 1; l < h; l++)
    {
        flag = 1;
        for (int z = l-1; z >= 0; z--)
        {
            if ((strcmp(s[l].a, s[z].a) == 0))
            {
                flag = 0;
            }
        }

        if (flag)
        {
            printf("%s\n", s[l].a);
        }
    }

    return 0;
}